Computing models have changed dramatically over the last two decades. The paradigm shifts from mainframes to personal computing to ubiquitous computing drive the need for significantly different programming models. Today we are in the personal computing era, where the desktop is the primary computing device. As we move to the next era, access to information from different terminals in a variety of different channels and modes becomes important.
In the following discussion, the terms terminal, channel, mode, multi-channel application, and multi-modal application are defined as follows:                A terminal refers to the device that is operated by a user. In addition to the traditional Internet terminal such as a networked desktop, there has been a tremendous increase in the types of terminal devices including PDAs, Smartphones, handheld pads, 2-way pagers and voice recognition terminals.        A channel refers to the medium, or the “pipe” over which the interaction takes place. The main channels of access are wireline access over the Internet, wireless access over cellular and other over-the-air networks and voice access over an analog (e.g., PSTN) network.        A mode refers to the way a user interacts with the application. Users can request information synchronously through a real-time, server-side application over the networks, or interact with an offline application on a client device such as a PDA. In addition, the application can asynchronously notify the user with an alert to initiate the interaction. These three modes are referred to as online, offline and alert modes of operation, respectively.        A multi-channel application is an application that can be accessed via two or more channels, including but not limited to wireline access by web browser, wireless access by internet-enabled phone, wireless access by PDA (Personal Digital Assistant), and voice access by telephone. The content and functionality may be the same or differ slightly across channels.        A multi-modal application is an application that can be accessed via two or more modes, including but not limited to real-time, disconnected, and asynchronous access.        
Thus, it is desirable for today's systems and applications to support end-user interaction in these multiple modes of operation over multiple channels. One solution is to build separate applications, e.g., deploy a separate alerts application, a separate data applications or a separate set of offline applications (one per each category/make). Another solution is to build unified applications that support multi-channel, multi-modal interaction. One such solution is described in patent application Ser. No. 10/054,623 of Chong et al., entitled “System and Method for Building Multi-modal and Multi-channel Applications” (the '623 application), which is assigned to the present assignee and which is fully and completely incorporated herein by reference.
The system described in the '623 application provides a highly integrated visual design environment based on a modeling paradigm that is referred to as User Interaction Modeling. This structured approach separates back-end data integration, business-logic and presentation during design, and delivers highly scalable modular applications that are flexible to extend, and easy to maintain.
FIG. 1 illustrates one example of a multi-channel, multi-modal application, which allows a traveling salesperson to access corporate information while on the move. The application may operate as follows in multiple modes and channels:                1. The salesperson makes a voice call into the company's enterprise voice portal. The salesperson quickly accesses a personalized menu, and asks for the status on a specific customer account.        
a. Mode:Real-timeb. Channel:Voice                2. A large amount of information is provided regarding a customer order. Instead of listening to all the information, the salesperson asks that the information be sent to his WAP phone.        
a. Mode:Real-timeb. Channel:Voice                3. The salesperson hangs up, and immediately receives a WAP alert on his phone. The salesperson continues to interact from the WAP channel of his phone. He quickly scans the information—there are a number of updates, of which the customer needs to be informed.        
a. Mode:Alert, then real-time browsingb. Channel:Wireless Data - WAP                4. The sales person forwards relevant information to the customer as an email summary, and also as an SMS message.        
a. Mode:Alertb. Channel:Wireless Data - SMS                5. The sales person then stores the updated customer information to the local device store.        
a. Mode:Off-lineb. Channel:Device local
As described above, one of the facets of a multi-channel application is the ability to interact with the user offline, which is provided by application logic, data and presentation, which resides inside the terminal device instead of the server. This enables users to interact with applications when there is no network connection to the server, where the online application is residing. Moreover, the data collected by the device local (offline) application can be synchronized with the server when a network connection is established.
The '623 application explains details of how a multi-channel application is created on a server. patent application Ser. No. 10/053,767 of Chong et al., entitled “Efficient System and Method for Running and Analyzing Multi-channel, Multi-modal Applications” (the '767 application), which is assigned to the present assignee and which is fully and completely incorporated herein by reference, explains the details of how a multi-channel application may be run.
In view of the foregoing, it would be desirable to develop an application that will be functionally equivalent on a homogenous set of devices, each with their own development environments and hardware and software differences.
One solution would be to create different sets of applications, each developed to address the various constraints of the devices. Some possible advantages to this approach may include the following:                Application developers can uniquely customize an application to fully utilize the resources on the particular hardware platform.        The application developer might be more able to fully optimize the application for size and speed by learning all of the features of the hardware platform.        This approach is also fine if the goal is to create an application that only works well on one platform.However, there are some obvious disadvantages, such as:        Developers would need to learn about the details of a development environment before they can begin development. This information must then be shared amongst all developers creating the application. Alternatively, there can be one team that does the application development and several other teams that port the code to other platforms. In the first scenario where all application developers know about all the platforms, there is a learning curve involved for all developers to be up to speed and working on the same page. In addition, as new device types appear with different development environments, the engineers would again have to learn together. In the second scenario, there is an obvious lag in the product release schedules since code ports take time.        Code maintenance becomes an issue when there are different ways of doing the same thing. If each hardware platform has its own development environment, using a different programming language with different APIs, then there are essentially separate code bases for each different environment. When bugs arise or features need to be added, these code changes need to be propagated through all the code bases. It becomes an engineering issue to keep track of all changes.        As new devices appear, if development requires a different development environment, then a new code base needs to be created for the application to work on the platform.        
Another approach may be to develop a middleware platform for the various architectures in their native implementation that can run applications designed to work on this middleware platform. The JAVA programming language is one such platform. As long as the device supports such a platform, an application written to run on the JAVA programming language platform will run on the device. However, the JAVA programming language not exist on all hardware platforms. In some cases, the JAVA programming language cannot be run on a platform because of resource constraints. In these cases, it is possible to create something that might behave like the JAVA programming language. However, this is reinventing something that already exists. Although the ideal would be to develop all applications in the JAVA programming language and have them run on different devices, the reality is far from this ideal. As previously mentioned, there are different device profiles (API) that still must be accounted for during code development.
As described in the '623 application, workflow models can be used to design applications in a higher-level paradigm. The workflow paradigm provides a high-level framework to begin generating code. The end-user need only know about the details of the workflow. A code generator may be employed to handle differences in the way applications work on different devices.
Code generation moves the need for many developers to know about different hardware platforms to one central location, the code generator. In such a scenario, a code generator may contain die intelligence about the requirements of the development environments. The code generator can be made to generate C code or JAVA programming language code or code in any other language. Note that the code generator can also output hardware specific code (code that uses a particular CPU instruction set). However, this need not be the code generator's goal since the development environments have already been optimized to deal with such issues. The code generator creates higher-level code that can be accepted by the development environments.
The present invention provides a workflow code generator, which may be used to generate JAVA programming language based offline (device resident) applications from a unified model, which may be created by a system for creating multi-channel and/or multi-modal applications, such as the system described in the '623 patent application.